home *** CD-ROM | disk | FTP | other *** search
/ Shareware Grab Bag / Shareware Grab Bag.iso / 014 / libtools.arc / SOUND.AQM / SOUND.ASM
Encoding:
Assembly Source File  |  1984-08-31  |  1.6 KB  |  71 lines

  1. ;     SOUND - Produce a sound for a specified amount of time
  2. ;
  3. ;    This procedure imitates the BASIC sound statement in
  4. ;    that it allows the caller to create a specified sound
  5. ;    for a specified amount of time.
  6. ;
  7. ;    Entry:
  8. ;        DI = frequency (21 to 65535) .. in hertz
  9. ;        BX = duration (0 to 65535) .. in hundredths of secs
  10. ;
  11. ;    Exit:
  12. ;        All registers are preserved
  13. ;
  14.  
  15.     PUBLIC    SOUND
  16.  
  17. ;    EQUATES
  18.  
  19. TIMER    EQU    40H        ;8253-5 TIMER
  20. PPI    EQU    61H        ;8255A-5 PPI
  21.  
  22. TENMS    EQU    2801        ;CONSTANT FOR 10 MILLISECOND LOOP
  23.  
  24. ;    Executable code starts here
  25.  
  26. SOUNDSG    SEGMENT    PARA PUBLIC 'CODE'
  27.  
  28. SOUND    PROC    FAR
  29.     ASSUME    CS:SOUNDSG
  30.  
  31.     PUSH    AX        ;AX - SAVE ALL REISTERS..
  32.     PUSH    BX        ;BX
  33.     PUSH    CX        ;CX
  34.     PUSH    DX        ;DX
  35.     PUSH    DI        ;DI
  36.  
  37.     MOV    AL,0B6H        ;AL = TIMER MODE VALUE
  38.     OUT    TIMER+3,AL    ;SET THE TIMER MODE
  39.  
  40.     MOV    DX,14H        ;SET THE 32-BIT TIMER DIVISOR TO..
  41.     MOV    AX,4F38H    ;1331000 ...
  42.     DIV    DI        ;AND DIVIDE BY THE FREQUENCY DESIRED
  43.  
  44.     OUT    TIMER+2,AL    ;SET TIMER 2'S LOW BYTE
  45.     MOV    AL,AH        ;AH = HIGH BYTE
  46.     OUT    TIMER+2,AL    ;SET TIMER 2'S HIGH BYTE
  47.  
  48.     IN    AL,PPI        ;GET PPI'S PORT B SETTING
  49.     MOV    AH,AL        ;... SAVE IT IN AH
  50.     OR    AL,00000011B    ;LAST 2 BITS ON (ENABLE SPK VIA TIMER 2)
  51.         OUT    PPI,AL        ;TURN ON THE SPEAKER
  52.  
  53. AA010:    MOV    CX,TENMS    ;CX = COUNTDOWN FOR 1/100 SEC
  54. AA020:    LOOP    AA020        ;... WAIT 1/100 OF A SECOND
  55.  
  56.     DEC    BX        ;Q: TIME UP?
  57.     JNZ    AA010        ;A: NO.. CONTINUE LOOPING
  58.  
  59.     MOV    AL,AH        ;AL = ORIGINAL PPI PORT B SETTING
  60.     OUT    PPI,AL        ;RESTORE IT.
  61.  
  62.     POP    DI        ;DI - RESTORE REGISTERS
  63.     POP    DX        ;DX
  64.     POP    CX        ;CX
  65.     POP    BX        ;BX
  66.     POP    AX        ;AX
  67.     RET    far        ;RETURN TO CALLER
  68. SOUND    ENDP
  69. SOUNDSG    ENDS
  70.     END    SOUND
  71.